// 导入 wechat-http 包
import http from 'wechat-http'

// 设置请求的基地址
http.baseURL = 'https://live-api.itheima.net'

// 设置请求拦截器
http.intercept.request = (config) => {
  // config：请求相关的信息
  console.log(config);
  // 为每个接口统一添加 Authorization 请求头
  // 先拿到全局数据中存储的 token
  const token = getApp().token
  // 如果 config.header 不存在，给它设置为 {}
  config.header = config.header || {}
  // token存在 并且 发送的请求不是刷新token的接口时，再给请求头添加 Authorization: token
  if (token && !config.url.includes('/refreshToken')) config.header.Authorization = token
  return config
}

// 设置响应拦截器
http.intercept.response = async (res) => {
  console.log('响应拦截器得到的响应结果：', res);
  // 状态码为 401，表示 token 失效
  if (res.statusCode === 401) {
    // 如果刷新 token 接口返回的状态码也是 401，跳转到登录页
    if (res.config.url.includes('/refreshToken')) {
      const pageStack = getCurrentPages()
      const currentPage = pageStack[pageStack.length - 1]
      // 跳转到登录页
      wx.redirectTo({
        url: '/pages/login/index?returnUrl=/' + currentPage.route
      })
      return res.data
    }
    // 调用刷新 token 的接口
    const {code, data} = await wx.http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    // 检查接口返回结果
    if (code !== 10000) return wx.utils.toast()
    // 更新 token 和 refreshToken
    getApp().setToken(data.token, data.refreshToken)

    console.log(res.config);
    // 刷新 token 之后，重新调用之前发生 401 的接口，然后将数据返回
    const result = await wx.http({
      ...res.config
    })
    return result
    // console.log(result);
  }
  // 剥离无效数据
  return res.data
}

// 将 http 挂载到 wx 全局对象，在其他页面和组件中就能直接通过 wx.http 去发起请求
wx.http = http

// export default http